﻿CREATE PROCEDURE [dbo].[proc_RefeicoesLoadByUnidadeData]
(
	@IdUnidade bigint,
	@DataRefeicao date
)
AS
BEGIN
	SET NOCOUNT ON
	DECLARE @Err int
	DECLARE @IdUnidadeContrato bigint;

	IF EXISTS (SELECT * FROM UnidadesContratosRefeicoes where IdUnidade = @IdUnidade)
	BEGIN

		SELECT
			r.[DataRefeicao],
			r.[TotalVendasPrevisto],
			r.[TotalCustosPrevisto],
			r.[TotalVendasEfectivo],
			r.[TotalCustosEfectivo],
			r.[RacioMPrimasPrevisto],
			r.[RacioMPrimasEfectivo],
			r.[DataCriacao],
			r.[DataAlteracao],
			cr.[IdRefeicaoContratada],
			cr.[NumeroContrato],
			cr.[CodTipoRefeicao],
			cr.[CodTipoClasseRefeitorio],
			cr.[DataCriacao],
			cr.[DataAlteracao],
			c.[DataContrato],
			c.[IdCliente],
			c.[IdUnidade],
			c.[DataInicioContrato],
			c.[DataFimContrato],
			cli.Nome,
			u.Designacao,
			u.UnidadePai,
			u.Servico,
			tr.Descricao as DescricaoTipoRefeicao,
			tr.DescricaoCurta as DescricaoCurtaTipoRefeicao,
			tr.Simbolo as SimboloTipoRefeicao,
			tr.Tipo as TipoTipoRefeicao,
			tcr.Descricao as DescricaoClasseRefeicao,
			tcr.DescricaoCurta as DescricaoCurtaClasseRefeicao,
			tcr.Simbolo as SimboloClasseRefeicao,
			tcr.Tipo as TipoClasseRefeicao
		FROM UnidadesContratosRefeicoes ucr
			inner join[ContratosRefeicoes] cr on cr.IdRefeicaoContratada = ucr.IdRefeicaoContratada 
													AND ucr.IdUnidade = @IdUnidade 
			  inner join Contratos c on cr.NumeroContrato = c.NumeroContrato
				 inner join Clientes cli on cli.IdCliente = c.IdCliente
					inner join Unidades u on u.IdUnidade = c.IdUnidade
					   inner join Tipologias tr on tr.Codigo = cr.CodTipoRefeicao and tr.Tipo = 'TipoRefeicao'
						 left join Tipologias tcr on tcr.Codigo = cr.CodTipoClasseRefeitorio  and tcr.Tipo ='ClasseRefeicao'
						   left join [Refeicoes] r on cr.IdRefeicaoContratada=r.IdRefeicaoContratada AND r.[DataRefeicao] = @DataRefeicao
		
	END
	ELSE
	BEGIN
		WITH UnidadesCTE (IdUnidade, UnidadePai)
		as
		(
			SELECT u.IdUnidade, u.UnidadePai 
			  FROM unidades u 
			 WHERE u.IdUnidade = @IdUnidade
			UNION ALL
			SELECT u.IdUnidade, u.UnidadePai 
  			  FROM unidades u 
				inner join UnidadesCTE cte on u.IdUnidade = cte.UnidadePai 
		)

		SELECT @IdUnidadeContrato = IdUnidade from UnidadesCTE where UnidadePai is null

		SELECT
			r.[DataRefeicao],
			r.[TotalVendasPrevisto],
			r.[TotalCustosPrevisto],
			r.[TotalVendasEfectivo],
			r.[TotalCustosEfectivo],
			r.[RacioMPrimasPrevisto],
			r.[RacioMPrimasEfectivo],
			r.[DataCriacao],
			r.[DataAlteracao],
			cr.[IdRefeicaoContratada],
			cr.[NumeroContrato],
			cr.[CodTipoRefeicao],
			cr.[CodTipoClasseRefeitorio],
			cr.[DataCriacao],
			cr.[DataAlteracao],
			c.[DataContrato],
			c.[IdCliente],
			c.[IdUnidade],
			c.[DataInicioContrato],
			c.[DataFimContrato],
			cli.Nome,
			u.Designacao,
			u.UnidadePai,
			u.Servico,
			tr.Descricao as DescricaoTipoRefeicao,
			tr.DescricaoCurta as DescricaoCurtaTipoRefeicao,
			tr.Simbolo as SimboloTipoRefeicao,
			tr.Tipo as TipoTipoRefeicao,
			tcr.Descricao as DescricaoClasseRefeicao,
			tcr.DescricaoCurta as DescricaoCurtaClasseRefeicao,
			tcr.Simbolo as SimboloClasseRefeicao,
			tcr.Tipo as TipoClasseRefeicao
		FROM [ContratosRefeicoes] cr 
			  inner join Contratos c on cr.NumeroContrato = c.NumeroContrato
				 inner join Clientes cli on cli.IdCliente = c.IdCliente
					inner join Unidades u on u.IdUnidade = c.IdUnidade
					   inner join Tipologias tr on tr.Codigo = cr.CodTipoRefeicao and tr.Tipo = 'TipoRefeicao'
						 left join Tipologias tcr on tcr.Codigo = cr.CodTipoClasseRefeitorio  and tcr.Tipo ='ClasseRefeicao'
							left join [Refeicoes] r on cr.IdRefeicaoContratada=r.IdRefeicaoContratada AND r.[DataRefeicao] = @DataRefeicao
		WHERE
			(c.IdUnidade = @IdUnidadeContrato) 
			
		SET @Err = @@Error

	END

	RETURN @Err
END
